package com.ruoyi.linkage.service.impl;

import java.util.List;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageInfo;
import com.ruoyi.linkage.Vo.LinkageStrategyVo;
import com.ruoyi.linkage.Vo.TemplateManageUpdateVo;
import com.ruoyi.linkage.Vo.TemplateManageVo;
import com.ruoyi.linkage.domain.LinkagePlcConf;
import com.ruoyi.linkage.domain.LinkageProcessTemplateItem;
import com.ruoyi.linkage.mapper.LinkageProcessTemplateItemMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.linkage.mapper.LinkageProcessTemplateManageMapper;
import com.ruoyi.linkage.domain.LinkageProcessTemplateManage;
import com.ruoyi.linkage.service.ILinkageProcessTemplateManageService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 流程模板管理Service业务层处理
 *
 * @author pengjie
 * @date 2023-12-20
 */
@Service
public class LinkageProcessTemplateManageServiceImpl implements ILinkageProcessTemplateManageService
{
    @Autowired
    private LinkageProcessTemplateManageMapper linkageProcessTemplateManageMapper;
    @Autowired
    private LinkageProcessTemplateItemMapper linkageProcessTemplateItemMapper;

    /**
     * 查询流程模板管理
     *
     * @param id 流程模板管理主键
     * @return 流程模板管理
     */
    @Override
    public LinkageProcessTemplateManage selectLinkageProcessTemplateManageById(String id)
    {
        return linkageProcessTemplateManageMapper.selectLinkageProcessTemplateManageById(id);
    }

    /**
     * 查询流程模板管理列表
     *
     * @param linkageProcessTemplateManage 流程模板管理
     * @return 流程模板管理
     */
    @Override
    public List<LinkageProcessTemplateManage> selectLinkageProcessTemplateManageList(LinkageProcessTemplateManage linkageProcessTemplateManage)
    {
        return linkageProcessTemplateManageMapper.selectLinkageProcessTemplateManageList(linkageProcessTemplateManage);
    }

    @Override
    public PageInfo<LinkageProcessTemplateManage> selectPage(TemplateManageVo templateManageVo) {
        IPage<LinkageProcessTemplateManage> page = new Page<>(Integer.parseInt(templateManageVo.getPageNo()),Integer.parseInt(templateManageVo.getPageSize()));
        String str=templateManageVo.getColumn();
        //修改驼峰命名为数据库列格式
        StringBuffer buf=new StringBuffer();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (Character.isUpperCase(c)) {
                buf.append('_');
                buf.append(Character.toLowerCase(c));
            }else {
                buf.append(c);
            }
        }
        templateManageVo.setColumn(buf.toString());
        List<LinkageProcessTemplateManage> list=linkageProcessTemplateManageMapper.selectListOrder(templateManageVo);
        list.stream().map(it->{
            LinkageProcessTemplateItem item=new LinkageProcessTemplateItem();
            item.setTemplateId(it.getId());
            List<LinkageProcessTemplateItem> itemList=linkageProcessTemplateItemMapper.selectLinkageProcessTemplateItemList(item);
            it.setItemList(itemList);
            return  it;
        }).collect(Collectors.toList());
        PageInfo<LinkageProcessTemplateManage> pageInfo=new PageInfo<>(list);
        return pageInfo;
    }

    /**
     * 新增流程模板管理
     *
     * @param linkageProcessTemplateManage 流程模板管理
     * @return 结果
     */
    @Override
    public int insertLinkageProcessTemplateManage(LinkageProcessTemplateManage linkageProcessTemplateManage)
    {
        return linkageProcessTemplateManageMapper.insertLinkageProcessTemplateManage(linkageProcessTemplateManage);
    }

    /**
     * 修改流程模板管理
     *
     * @param linkageProcessTemplateManage 流程模板管理
     * @return 结果
     */
    @Override
    public int updateLinkageProcessTemplateManage(LinkageProcessTemplateManage linkageProcessTemplateManage)
    {
        return linkageProcessTemplateManageMapper.updateLinkageProcessTemplateManage(linkageProcessTemplateManage);
    }

    @Transactional
    @Override
    public int editLinkageProcessTemplateManage(TemplateManageUpdateVo templateManageUpdateVo) {
        LinkageProcessTemplateManage linkageProcessTemplateManage=new LinkageProcessTemplateManage();
        linkageProcessTemplateManage.setId(templateManageUpdateVo.getId());
        linkageProcessTemplateManage.setTemplateName(templateManageUpdateVo.getTemplateName());
        linkageProcessTemplateManageMapper.updateLinkageProcessTemplateManage(linkageProcessTemplateManage);
        List<Integer> list=templateManageUpdateVo.getItemList().stream().map(it->{
            return linkageProcessTemplateItemMapper.updateLinkageProcessTemplateItem(it);
        }).collect(Collectors.toList());
        return list.isEmpty()?0:1;
    }

    /**
     * 批量删除流程模板管理
     *
     * @param ids 需要删除的流程模板管理主键
     * @return 结果
     */
    @Override
    public int deleteLinkageProcessTemplateManageByIds(String[] ids)
    {
        return linkageProcessTemplateManageMapper.deleteLinkageProcessTemplateManageByIds(ids);
    }

    /**
     * 删除流程模板管理信息
     *
     * @param id 流程模板管理主键
     * @return 结果
     */
    @Override
    public int deleteLinkageProcessTemplateManageById(String id)
    {
        return linkageProcessTemplateManageMapper.deleteLinkageProcessTemplateManageById(id);
    }
}
